package hwf.model;

import java.io.File;
import java.util.Date;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

/**
 * 发送带附件的邮件
 */
public class AttachmentMailSender {

    public static boolean sendMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        if (mailInfo.isValidate()) {
            // 如果需要身份认证，则创建一个密码验证器
            authenticator = new MyAuthenticator(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
        // 根据邮件发送的属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getInstance(mailInfo
                .getP(), authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址，并设置到邮件消息中
            mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mailInfo.getToAddress()));
            mailMessage.setRecipients(Message.RecipientType.CC,InternetAddress.parse(mailInfo.getCcAddress()));
           // mailMessage.setRecipients(Message.RecipientType.CC,InternetAddress.parse(ss));
            //Message.RecipientType.CC 此后面的后缀To 收件人 cc抄送人  BCC密送人
            //mailMessage.setReplyTo(to);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            
            // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(mailInfo.getContent(), "text/html; charset=GBK");
            mainPart.addBodyPart(html);
            // 为邮件添加附件
            String[] attachFileNames = mailInfo.getAttachFileNames();
            if (attachFileNames != null && attachFileNames.length > 0) {
                // 存放邮件附件的MimeBodyPart
                MimeBodyPart attachment = null;
                File file = null;
                for (int i = 0; i < attachFileNames.length; i++) {
                    attachment = new MimeBodyPart();
                    // 根据附件文件创建文件数据源
                    file = new File(attachFileNames[i]);
                   //FileDataSource fds = new FileDataSource(file);
                    //attachment.setDataHandler(new DataHandler(fds));
                    // 为附件设置文件名
                    attachment.attachFile(file);
                    attachment.setFileName(MimeUtility.encodeWord(file.getName(), "GB2312",
                            null));//MimeUtility.encodeWord 位于javax.mail.internet.MimeUtility下的方法实现需求字符编码格式
                    mainPart.addBodyPart(attachment);
                   
                }
            }
            // 将MiniMultipart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
            
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    
    
}

